home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / PACKET / CBBS60SO.ZIP / MBTERM.C < prev    next >
Text File  |  1988-11-10  |  2KB  |  138 lines

  1.  
  2. /*
  3.  *  MBTERM.C - 10/19/87 - Terminal emulators and things.
  4.  */
  5.  
  6. #include "mb.h"
  7.  
  8. char *talkm1, *talkm2, *talkm3, *talkm4;
  9.  
  10. /*
  11.  *  User wants to talk to the console.
  12.  */
  13.  
  14. utalk()
  15. {
  16.   register PORTS *p;
  17.   register short i;
  18.  
  19.   p = port;
  20.   prtx(talkm2);
  21.  
  22.   ioport(cport);
  23.   prtx(talkm4);
  24.  
  25.   for (i = 0; i < 10; i++)
  26.   {
  27.     wait(2);
  28.     if (s_param & s_page) outchar(ctl_g);
  29.     wait(1);
  30.     if (s_param & s_page) outchar(ctl_g);
  31.  
  32.     if (instat())
  33.     {
  34.       cport->fl = NULL;
  35.       if (p->tmode)
  36.       {
  37.         ioport(p);
  38.         cmdtnc(); convtnc();
  39.       }
  40.       term(p);
  41.       ioport(p);
  42.       if (p->tmode)
  43.       {
  44.         cmdtnc();
  45.         trantnc();
  46.       }
  47.       return;
  48.     }
  49.  
  50.     ioport(p);
  51.     if (instat()) return;
  52.     ioport(cport);
  53.   }
  54.   ioport(p); port->msg = talkm3;
  55. }
  56.  
  57. /*
  58.  *  Console used as terminal to tnc.
  59.  */
  60.  
  61. lterm()
  62. {
  63.   register PORTS *m, *s;
  64.  
  65.   m = cport;
  66.  
  67.   if (m->flds is 2)
  68.   if ((m->fl = fopen(m->fld[1], "r")) isnt NULL)
  69.   { fclose(m->fl); m->msg = mexst; return; }
  70.  
  71.   if ((s = findport(m->opt2)) is NULL) { m->msg = mnport; return; }
  72.   if (s is m)                          { m->msg = mcant;  return; }
  73.  
  74.   if (!(s->flags & p_term))
  75.   {
  76.     if (!(s->mode & idle)) { m->msg = minuse; return; }
  77.     ioport(s);
  78.  
  79.     switch(s->dev)
  80.     {
  81.       case p_serial:
  82.         prtx("*** CONNECTED to $O\n");
  83.         break;
  84.  
  85.       default: ;
  86.     }
  87.  
  88.     s->flags setbit p_term;
  89.   }
  90.  
  91.   m->fl = NULL;
  92.   if (m->flds is 2) m->fl = fopen(m->fld[1], "w");
  93.   term(s);
  94.   ioport(m);
  95.   if (m->fl isnt NULL) fclose(m->fl);
  96. }
  97.  
  98. /*
  99.  *  General "do terminal" things.
  100.  */
  101.  
  102. term(s)
  103. PORTS *s;
  104. {
  105.   register char ch;
  106.   register PORTS *m;
  107.   byte ec;
  108.  
  109.   m = cport;
  110.   m->flags clrbit p_give;
  111.   ec = s->ec;
  112.   s->ec = true;
  113.  
  114.   while(true)
  115.   {
  116.     ioport(m);
  117.     if (instat())
  118.     {
  119.       if ((ch = inchar()) is '\r') ch = '\n';
  120.       if (ch is rchar)
  121.       {
  122.         m->flags setbit p_give;
  123.         s->ec = ec;
  124.         return;
  125.       }
  126.       ioport(s); outchar(ch);
  127.       if (m->fl isnt NULL) if (ch isnt cpmeof) putc(ch, m->fl);
  128.     }
  129.  
  130.     ioport(s);
  131.     if (instat())
  132.     {
  133.       if ((ch = inchar()) is '\r') ch = '\n';
  134.       if (m->fl isnt NULL) if (ch isnt cpmeof) putc(ch, m->fl);
  135.     }
  136.   }
  137. }
  138.